package com.trsj.lnsj.controller;

import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RestController;

@Api(tags = "微信支付接口")
@RestController
public class WeixinNotifyController {
	
//    private static final String SUCCESS = "SUCCESS";
//    private static final String NOTIFY_URL = "https://api.mch.weixin.qq.com/pay/orderquery";
//    private static final Logger LOGGER = LoggerFactory.getLogger(WeixinNotifyController.class);
//
//    // 第二步拼接key，key设置路径：微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置
//    @Value("${pay.wx.apikey}")
//    private String apiKey;
//
//    @Value("${pay.wx.merchantId}")
//    private String merchantId;
//
//    @Value("${pay.wx.appId}")
//    private String appId;
//    @Autowired
//    private PreOrderService preOrderService;
//
//    @Autowired
//    private PreOrderPayService preOrderPayService;
//
//    @Autowired
//    private ShoppingSpreeService shoppingSpreeService;
//
//    private SimpleDateFormat formate=new SimpleDateFormat("YYYYMMDDHHMMSS");
//
//    @PostMapping(value = "/pay/wx/notify", produces = MediaType.APPLICATION_XML_VALUE)
//    @ResponseBody
//    public String wxPayOrderCallback(HttpServletRequest request, HttpServletResponse response) throws Exception {
//        response.setCharacterEncoding("UTF-8");
//        response.setContentType("text/html;charset=UTF-8");
//        response.setHeader("Access-Control-Allow-Origin", "*");
//        boolean isSuccess = false;
//        // 微信给返回的东西
//        StringBuilder b = new StringBuilder();
//        try {
//            String inputLine;
//            while ((inputLine = request.getReader().readLine()) != null) {
//                b.append(inputLine);
//            }
//        } catch (Exception e) {
//            LOGGER.error(e.getMessage(), e);
//            return returnXml(isSuccess);
//        } finally {
//            request.getReader().close();
//        }
//        String notityXml = b.toString();
//        if (StringUtils.isEmpty(notityXml)) {
//            return returnXml(isSuccess);
//        }
//        isSuccess = handelerNotify( notityXml);
//        if (LOGGER.isDebugEnabled()) {
//            LOGGER.debug("----返回给微信的xml：{}", isSuccess);
//        }
//        return returnXml(isSuccess);
//    }
//    private boolean handelerNotify(String notityXml) throws Exception{
//    	 boolean isSuccess = false;
//    	 Map<String, String> map = WeixinUtil.xmlToMap(notityXml);
//         // 解析各种数据
//         String return_code = map.get("return_code");// SUCCESS/FAIL
//         String appid = map.get("appid");// 应用ID
//         String attach = map.get("attach");// 商家数据包
//         String bank_type = map.get("bank_type");// 付款银行
//         String cash_fee = map.get("cash_fee");// 现金支付金额
//         String fee_type = map.get("fee_type");// 货币种类
//         String is_subscribe = map.get("is_subscribe");// 是否关注公众账号
//         String mch_id = map.get("mch_id");// 商户号
//         String nonce_str = map.get("nonce_str");// 随机字符串
//         String openid = map.get("openid");// 用户标识
//         String out_trade_no = map.get("out_trade_no");// 获取商户订单号
//         String result_code = map.get("result_code");// 业务结果
//         String sign = map.get("sign");// 获取签名
//         String time_end = map.get("time_end");// 支付完成时间
//         String total_fee = map.get("total_fee");// 获取订单金额
//         String trade_type = map.get("trade_type");// 交易类型
//         String transaction_id = map.get("transaction_id");// 微信支付订单号
//         if (LOGGER.isDebugEnabled()) {
//             LOGGER.debug("*******************************************************");
//             LOGGER.debug("-------------------应用ID: {}", appid);
//             LOGGER.debug("-------------------商家数据包: {}", attach);
//             LOGGER.debug("-------------------付款银行: {}", bank_type);
//             LOGGER.debug("-------------------现金支付金额: {}", cash_fee);
//             LOGGER.debug("-------------------货币种类: {}", fee_type);
//             LOGGER.debug("-------------------是否关注公众账号: {}", is_subscribe);
//             LOGGER.debug("-------------------商户号: {}", mch_id);
//             LOGGER.debug("-------------------随机字符串: {}", nonce_str);
//             LOGGER.debug("-------------------用户标识: {}", openid);
//             LOGGER.debug("-------------------获取商户订单号: {}", out_trade_no);
//             LOGGER.debug("-------------------业务结果: ", result_code);
//             LOGGER.debug("-------------------return code(SUCCESS/FAIL): ", return_code);
//             LOGGER.debug("-------------------获取签名-微信回调的签名: {}", sign);
//             LOGGER.debug("-------------------支付完成时间: {}", time_end);
//             LOGGER.debug("-------------------获取订单金额: {}", total_fee);
//             LOGGER.debug("-------------------交易类型: {}", trade_type);
//             LOGGER.debug("-------------------微信支付订单号: {}", transaction_id);
//             LOGGER.debug("*******************************************************");
//         }
//         // 数据加密
//         SortedMap<String, String> parameters = new TreeMap<>();
//         parameters.put("appid", appid);// 应用ID
//         parameters.put("attach", attach);// 商家数据包
//         parameters.put("bank_type", bank_type);// 付款银行
//         parameters.put("cash_fee", cash_fee);// 现金支付金额
//         parameters.put("fee_type", fee_type);// 货币种类
//         parameters.put("is_subscribe", is_subscribe);// 是否关注公众账号
//         parameters.put("mch_id", mch_id);// 商户号
//         parameters.put("nonce_str", nonce_str);// 随机字符串
//         parameters.put("openid", openid);// 用户标识
//         parameters.put("out_trade_no", out_trade_no);// 商户订单号
//         parameters.put("result_code", result_code);// 业务结果
//         parameters.put("return_code", return_code);// SUCCESS/FAIL
//         parameters.put("sign", sign);// sign签名
//         parameters.put("time_end", time_end);// 支付完成时间
//         parameters.put("total_fee", total_fee);// 获取订单金额
//         parameters.put("trade_type", trade_type);// 交易类型
//         parameters.put("transaction_id", transaction_id);// 微信支付订单号
//         isSuccess = validateSign(parameters, apiKey);
//         if (isSuccess) {
//         	 PreOrderPay record = preOrderPayService.findByBusiSn(out_trade_no);
//         	if(record == null || ! total_fee.equals(String.valueOf(new BigDecimal(record.getAmount().toString()).multiply(new BigDecimal(100)).longValue()))){
//         		return isSuccess = false;
//         	}
//     		if(SUCCESS.equals(return_code)){
//        		record.setPayResult((byte) 1);
//            }else{
//        		record.setPayResult((byte) 2);
//            }
//     		Date date = new Date();
//     		record.setTradeNo(transaction_id);
//     		record.setTradeStatus(return_code);
//     		record.setPayTime(date);
//     		record.setLastModify(date);
//         	preOrderPayService.updateByPrimaryKey(record);
//         	if(SUCCESS.equals(return_code)){
//                AppPreOrderQueryDTO preOrder = preOrderService.findById(Long.valueOf(record.getPreOrderId()));
//        		if(preOrder.getStatus() != OrderStatusEnum.PAID){
//                	preOrderService.updatePreOrderStatus(record.getPreOrderId(), OrderStatusEnum.PAID);
//                    AsynchronousCallUtil.run(() -> preOrderService.sendSmsMsg(preOrder.getOrderId()));
//        		}
//        		List<AppPreOrderGoodsDTO> appPreOrderGoodsList = preOrder.getAppPreOrderGoodsList();
//                for(AppPreOrderGoodsDTO dto: appPreOrderGoodsList){
//                	if(dto.getSpreeId() != null && dto.getSpreeId() > 0 && dto.getQuantity() > 0 && preOrder.getTag() == OrderTag.ZCQG.getTag()){
//                		shoppingSpreeService.updateMappingDepositStocksByGoodIdAndSpreeId(dto.getGoodsId(), dto.getSpreeId().intValue(), dto.getQuantity().intValue());
//                	}
//                }
//            }
//         	isSuccess = true;
//         }
//		return isSuccess;
//    }
//
//    private String returnXml(boolean isSuccess) {
//        return isSuccess
//                // 支付成功
//                ? "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>"
//                // 支付失败
//                : "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[NO]]></return_msg></xml>";
//    }
//
//    private boolean validateSign(SortedMap<String, String> smap, String apiKey) {
//        String sign = WeixinUtil.sign(smap, apiKey);
//        LOGGER.debug("Calculate sign: {}", sign);
//        /** 微信端返回的合法签名 */
//        String validSign = smap.get("sign").toUpperCase();
//        return validSign.equalsIgnoreCase(sign);
//    }
//
//    public static void main(String[] args) throws Exception {
//    	WeixinNotifyController c = new WeixinNotifyController();
//    	c.apiKey = "xuzhouxugongqichezhizaoyouxiango";
//    	c.handelerNotify("<xml><appid><![CDATA[wx0f75f63cb8112b22]]></appid><bank_type><![CDATA[CFT]]></bank_type><cash_fee><![CDATA[1]]></cash_fee><fee_type><![CDATA[CNY]]></fee_type><is_subscribe><![CDATA[N]]></is_subscribe><mch_id><![CDATA[1436605402]]></mch_id><nonce_str><![CDATA[5e04f74f714c44978b7b281e2a200bdb]]></nonce_str><openid><![CDATA[oA_Wg0cCNYdIWKJRKzXh_dnJd3q0]]></openid><out_trade_no><![CDATA[xcmg20181212145508142692]]></out_trade_no><result_code><![CDATA[SUCCESS]]></result_code><return_code><![CDATA[SUCCESS]]></return_code><sign><![CDATA[BBBCA746F94F18A21F4DECD90BD45498]]></sign><time_end><![CDATA[20181212145522]]></time_end><total_fee>1</total_fee><trade_type><![CDATA[APP]]></trade_type><transaction_id><![CDATA[4200000230201812126767753756]]></transaction_id></xml>");
//	}
}
